<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // async 和await ES8，解决promise的调用问题；基于promise

      function fn1() {
        return new Promise((res) => {
          setTimeout(() => {
            res(1111);
          }, 1000);
        });
      }

      function fn2() {
        return new Promise((res, rej) => {
          setTimeout(() => {
            res(2222);
            // rej("error");
          }, 1000);
        });
      }

      function fn3() {
        return new Promise((res) => {
          setTimeout(() => {
            res(333);
          }, 1000);
        });
      }

      // Promise.all([fn1(),fn2(),fn3()]).then(res=>{
      //     console.log(res);
      // })

      // 依次执行；链式操作；
      // fn1().then(res=>{
      //     console.log(res);
      //     return fn2();
      // }).then(res=>{
      //     console.log(res);
      //     return fn3();
      // }).then(res=>{
      //     console.log(res);
      // }).catch(err=>{console.log(err);})

      // 改成ES8: async 和await写法；
      // 声明一个 async函数 async修饰符；
      // 同步的写法 调用异步问题；
      // try...catch... 捕捉错误；
      // async function asyncFn() {
      //     try {
      //         var res1 = await fn1();
      //         console.log(res1);
      //         var res2 = await fn2();
      //         console.log(res2);
      //         var res3 = await fn3();
      //         console.log(res3);
      //     }catch(e){
      //         console.log(e);
      //     }

      // }
      // asyncFn();

      // function asyncFn(){
      //     fn1().then(res=>{
      //         console.log(res);
      //     })
      //     fn2().then(res=>{
      //         console.log(res);
      //     })
      //     fn3().then(res=>{
      //         console.log(res);
      //     })
      // }
      // asyncFn();

      // async 和 await 等待只能等待  async里的异步；不能出现函数的嵌套；
      var arr = [fn1, fn2, fn3];

      // 1.await 只能等待一个async里的异步；
      // arr.forEach(async function(fn){
      //   var res =   await fn();
      //   console.log(res);
      // })

      // async function asyncFn() {
      //     for (let i = 0; i < arr.length; i++) {
      //         let res = await arr[i]();
      //         console.log(res);
      //     }
      // }
      // asyncFn();

      // async await函数里不能有嵌套
      // async function asyncFn(){

      //     arr.forEach(function(fn){
      //       let res =   await fn();
      //       console.log(res);
      //     })

      // }
      // asyncFn();
    </script>
  </body>
</html>
